Skip to content

GIT-分支管理

Git 中关于分支管理的基础操作:​​新建分支​​、​​切换分支​​ 和 ​​删除分支​​。这些是日常开发中使用频率极高的命令。

核心概念回顾:​**​

  • ​分支 (Branch):​​ Git 的核心功能之一。它允许你在一个独立于主开发线(通常是 mainmaster)的路径上进行开发,不会影响主线代码。非常适合开发新功能、修复 Bug 或尝试新想法。
  • ​HEAD:​​ 一个特殊的指针,指向你当前正在工作的分支(或具体的提交)。当你切换分支时,HEAD 会跟着移动。
  • ​工作目录 (Working Directory):​​ 你电脑上看到的项目文件目录。
  • ​暂存区 (Staging Area / Index):​​ 准备提交的文件集合。

新建分支

创建一个新分支意味着你基于某个起点(通常是当前所在分支的最新提交)开辟了一条新的开发线。

​命令:​

git branch <new-branch-name>
  • <new-branch-name>:​​ 你想要创建的新分支的名称。选择一个​​有意义且描述性强​​的名字很重要(例如 feature/user-authentication, bugfix/login-error, experiment/new-algorithm)。
  • ​执行后:​
    • 在 Git 的内部数据库中创建了一个指向​​当前所在分支最新提交​​的新指针。
    • ​重要:这个命令 不会 自动切换到新分支!​​ 你仍然停留在原来的分支上。

​示例:​

# 假设当前在 main 分支
git branch feature/add-search
# 此时创建了名为 feature/add-search 的新分支,但 HEAD 仍然指向 main

​常用选项:​

  • git checkout -b <new-branch-name>:​​ 这是一个​​非常常用​​的快捷命令。它等价于先执行 git branch <new-branch-name> 然后立即执行 git checkout <new-branch-name>。一步完成创建并切换到新分支。

    git checkout -b feature/add-search
    # 创建 feature/add-search 分支并立即切换到它

切换分支

切换分支意味着将你的​​工作目录​​和 ​​HEAD 指针​​移动到指定的分支。工作目录中的文件会自动更新,以匹配目标分支的最新提交状态。

​命令:​

git checkout <branch-name>
  • <branch-name>:​​ 你想要切换到的​​已存在​​分支的名称。
  • ​执行前注意事项:​
    • ​工作目录必须干净!​​ 这是最重要的规则。在切换分支前:
      • 提交 (git commit) 你当前分支上所有希望保留的修改。
      • 或者,使用 git stash 将未提交的修改暂时储藏起来(之后可以在其他分支恢复)。
    • 如果工作目录或暂存区有未提交的修改,并且这些修改与目标分支上的文件有冲突,Git 会阻止你切换,并提示你先处理这些修改(提交、储藏或丢弃)。
  • ​执行后:​
    • HEAD 指针移动到 <branch-name> 分支。
    • 工作目录中的文件被替换为目标分支的最新快照。
    • 后续的提交操作将在新切换到的分支上进行。

​示例:​

# 从 main 分支切换到已存在的 feature/add-search 分支
git checkout feature/add-search
# 现在 HEAD 指向 feature/add-search,工作目录是 feature/add-search 的内容

​现代替代命令 (推荐):​

  • git switch <branch-name>:​​ Git 2.23 版本引入了更专注于切换分支的命令 git switch,语义更清晰,与 git checkout 的部分功能(如恢复文件)分离,减少了混淆。

    git switch feature/add-search

删除分支

当你完成了一个分支上的工作(例如,功能开发完毕并合并回主分支),或者决定放弃某个实验性分支时,可以删除它,以保持仓库的整洁。

​命令:​

git branch -d <branch-name>
  • <branch-name>:​​ 你想要删除的分支的名称。

  • ​重要限制:​

    • 你​​不能​​删除你当前所在的分支(HEAD 指向的分支)。必须先切换到其他分支(如 main)。
    • 如果目标分支包含​​尚未合并​​到当前分支(或你指定的其他分支)的更改,Git 会拒绝删除,以防止丢失工作。它会提示类似 error: The branch 'branch-name' is not fully merged 的错误。
  • ​强制删除 (慎用!):​

    • 如果你确定要删除一个包含未合并更改的分支(比如一个彻底失败的实验),可以使用 -D (大写) 选项强制删除:

      git branch -D <branch-name>
    • ​警告:​​ 强制删除会​​永久丢失​​该分支上所有未合并的提交!请确保你真的不再需要这些更改。

​示例:​

# 1. 确保不在要删除的分支上 (比如先切回 main)
git switch main

# 2. 安全删除 (如果分支已合并)
git branch -d feature/add-search

# 3. 强制删除 (如果分支未合并且确定要丢弃)
git branch -D experiment/failed-idea

常见场景(切换分支-总结)

  1. ​开始新功能开发:​

    git checkout main           # 确保在基础分支 (如 main)
    git pull                    # 获取最新代码
    git checkout -b feature/xyz # 创建并切换到新功能分支 feature/xyz
    # ... 在 feature/xyz 上进行开发、提交 ...
  2. ​修复紧急 Bug:​

    git checkout main           # 确保在基础分支
    git pull
    git checkout -b hotfix/abc  # 创建并切换到热修复分支 hotfix/abc
    # ... 在 hotfix/abc 上修复 Bug、提交 ...
  3. ​完成分支工作后:​

    git checkout main           # 切换回主分支
    git merge feature/xyz       # 将 feature/xyz 合并到 main (或通过 Pull Request)
    git branch -d feature/xyz   # 删除已合并的 feature/xyz 分支

其他

查看分支信息

  • git branch:​​ 列出所有本地分支。当前分支前面会有一个 * 号。
  • git branch -v:​​ 列出分支并显示每个分支最新的提交信息。
  • git branch -a:​​ 列出所有本地分支和远程跟踪分支 (以 remotes/ 开头)。
  • git log --oneline --decorate --graph --all:​​ 以图形化方式查看所有分支的提交历史。

关键要点

  1. git branch <name> 只创建不切换。​
  2. git checkout -b <name>git switch -c <name> 是创建并切换的快捷方式。​
  3. ​切换分支 (checkout / switch) 前务必保证工作目录干净。​
  4. ​删除分支 (branch -d) 前确保:​
    • 不在该分支上。
    • 该分支的更改已合并(除非强制删除 -D)。
  5. ​强制删除 (-D) 会丢失未合并的提交,务必谨慎!​
  6. ​使用 git switch 代替 git checkout 来切换分支是更现代、更清晰的做法。​

熟练掌握这些分支操作是高效使用 Git 进行协作开发的基础。记得经常使用 git statusgit branch 来查看当前状态。